package mine.code.question.动态规划;

import org.junit.Test;

/**
 * 给定一个非负整数 n，计算各位数字都不同的数字 x 的个数，其中 0 ≤ x < 10n
 *
 * @author caijinnan
 * @date 2020/6/2 14:13
 */
public class 计算各个位数不同的数字个数 {

    @Test
    public void run() {
        System.out.println(countNumbersWithUniqueDigits(3));
    }

    public int countNumbersWithUniqueDigits(int n) {
        if (n == 1) {
            return 10;
        }
        int first = 10, second = 9 * 9;
        int size = Math.min(n, 10);
        for (int i = 2; i <= size; i++) {
            first += second;
            second *= 10 - i;
        }
        return first;
    }
}